/**
 * jquery form fill
 */
(function($){
	function Fill() {
		this.defaults = {
			styleElementName: 'none',	// object | none
			dateFormat: 'mm/dd/yy',
			debug: false,
			elementsExecuteEvents: ['checkbox', 'radio', 'select-one']
		};
	};
	$.extend(Fill.prototype, {
		clear : function (obj, _element) {
			_element.find("*").each(function(i, item){
				if ($(item).is("input") || $(item).is("select") || $(item).is("textarea")) {
					try {
						switch ($(item).attr("type")) {
							case "hidden":
							case "password":
							case "textarea":
							case "text":
								$(item).val('');
								break;
							case "select":
								$(item).get(0).selectedIndex=0;//选中第一个
								break;
							case "radio":
							case "checkbox":
								$(item).attr("checked", false);
								break;
							}
						} catch(e) {}
				}
			});
		},
		
		fill : function (obj, _element, settings) {
			this.clear(obj,_element);
			options = $.extend({}, this.defaults, settings);
			_element.find("*").each(function(i, item){
				if ($(item).is("input") || $(item).is("select") || $(item).is("textarea")) {
					try {
						var objName=null;
						var arrayAtribute=null;
						var value=null;
						try {
							if (options.styleElementName == "object") {
								if ($(item).attr("name").match(/\[[0-9]*\]/i)) {
									objName = $(item).attr("name").replace(/^[a-z]*[0-9]*[a-z]*\./i, 'obj.').replace(/\[[0-9]*\].*/i, "");
									arrayAtribute = $(item).attr("name").match(/\[[0-9]*\]\.[a-z0-9]*/i) + "";
									arrayAtribute = arrayAtribute.replace(/\[[0-9]*\]\./i, "");
								} else {
									objName = $(item).attr("name").replace(/^[a-z]*[0-9]*[a-z]*\./i, 'obj.');
								}
							} else if (options.styleElementName == "none") {
								objName = 'obj.' + $(item).attr("name");
							}
							value = eval(objName);
						} catch(e) {
							if (options.debug) {
								debug(e.message);
							}
						}					
						if (value != null) {
							var _type = $(item).attr("type");
							if(_type == "hidden" || _type == "password"){
								$(item).val(value);
							}else if(_type == "text"){
								if ($(item).hasClass("hasDatepicker")) {
									var re = /^[-+]*[0-9]*$/;
									var dateValue = null;
									if (re.test(value)) {
										dateValue = new Date(parseInt(value));
										var strDate = dateValue.getUTCFullYear() + '-' + (dateValue.getUTCMonth() + 1) + '-' + dateValue.getUTCDate();
										dateValue = $.datepicker.parseDate('yy-mm-dd', strDate);
									} else if (value) {										
										dateValue = $.datepicker.parseDate(options.dateFormat, value);
									}
									$(item).datepicker('setDate', dateValue);							
								} else if ($(item).attr("alt") == "double") {
									$(item).val(value.toFixed(2));
								} else {
									$(item).val(value);
								}
							}else if(_type == "select-one"){
								if (value) {
									$(item).val(value);
								}
							}else if(_type == "radio"){
								$(item).each(function (i, radio) {
									if ($(radio).val() == value) {
										$(radio).attr("checked", "checked");
									}
								});
							}else if(_type == "checkbox"){
								if ($.isArray(value)) {
									$.each(value, function(i, arrayItem) {
										if (typeof(arrayItem) == 'object') {											
											arrayItemValue = eval("arrayItem." + arrayAtribute);
										} else {
											arrayItemValue = arrayItem;
										}
										if ($(item).val() == arrayItemValue) {
											$(item).attr("checked", "checked");
										}
									}); 
								} else {
									if ($(item).val() == value) {
										$(item).attr("checked", "checked");
									}
								}		
							}else{
								$(item).val(value);
							}
						}
					} catch(e) {
						if (options.debug) {
							debug(e.message);
						}
					}
				}
			});
		}
	});
	$.fn.fill = function (obj, settings) {
		$.fill.fill(obj, $(this), settings);
		return this;
	};
	$.fn.clear = function (obj) {
		$.fill.clear(obj, $(this));
		return this;
	};
	$.fill = new Fill();
})(jQuery);

/**
 * 提示modal - start
 */
OsModal = function (){};
OsModal.prototype = {
	//隐藏
	tipHidden : function(msg, id){
		this._tip('hidden', msg, id);
	},
	// 成功提示
	tipSuccess : function(msg, id) {
		this._tip('success', msg, id);
	},
	
	// 失败提示
	tipFailure : function(msg ,id) {
		this._tip('failure', msg, id);
	},
	
	// 提示
	_tip : function(type, msg, id){
		if(id == undefined){
			id = '_osAlertTip';
		}
		var ocTip = $('#'+id);
		ocTip.html(msg);
		ocTip.show();
		if(type == 'failure'){
			ocTip.attr('class','alert alert-warning ux-alert');
		}else if(type == 'success'){
			ocTip.attr('class','alert alert-success ux-alert');
		}else{
			ocTip.hide();
		}
	},
	
	//alert 弹出提示
	alert : function(msg,callback){
		this._dialog('alert', msg, callback);
	},
	
	//confirm 弹出提示
	confirm : function(msg,okCallback,cancelCallback){
		this._dialog('confirm',msg,okCallback,cancelCallback);
	},
	
	//公共弹出提示
	_dialog : function(type,msg,okCallback,cancelCallback){
		var _osDialog = $('#_osDialogModal');
		_osDialog.find('._osContent').html(msg);
		_osDialog.modal('show');
		if(type == 'alert'){
			_osDialog.find('.os-cancel').hide();
			_osDialog.find('.os-ok').click(function() {
				_osDialog.modal('hide');
				if(okCallback){
					okCallback(type);
				}
			});
		}else if(type == 'confirm'){
			_osDialog.find('.os-cancel').show();
			_osDialog.find('.os-ok').click(function() {
				_osDialog.modal('hide');
				if(okCallback){
					okCallback(type);
				}
				//避免confirm和alert一起使用绑定click多次
				$('.os-ok').unbind("click");
			});
			_osDialog.find('.os-cancel').click(function() {
				_osDialog.modal('hide');
				if(cancelCallback){
					cancelCallback(type);
				}
			});
		}
	},
	
	//根据id show dialog
	show : function(id){
		if(id){
			$('#' + id).find('form').each(function(i,item){
				$(item).clear();
			});
			$('#' + id).modal('show');
			$('#_osAlertTip').hide();
		}
	},
	
	hide : function(id){
		if(id){
			$('#' + id).modal('hide');
		}else{
			$('#_osDialogModal').hide();
		}
	},
	
	
};
Modal = new OsModal();

/**
 * 提示modal - end
 */

/**
 * 通用类
 */
OS = function() {};
OS.prototype = {
		
	//判断是否为空,如果为空返回true，否则返回false
	isEmpty : function(text){
		if(text == undefined || text == null || text == '' || text == 'null' || text == 'undefined'){
			return true;
		}else{
			text = text.replace(/(\s*$)/g, '');
			if(text == ''){
				return true;
			}
		}
		return false;
	},
	//英文、数字正则表达式，验证通过返回 true；
	numValid : function(text){
		var patten = new RegExp(/^[0-9]+$/);
		return patten.test(text);
	},
	//英文、数字正则表达式
	enNumValid : function(text){
		var patten = new RegExp(/^[a-zA-Z0-9]+$/);
		return patten.test(text);
	},
	//英文、数字、-、_验证
	cValid : function(text){
		var patten = new RegExp(/^[a-zA-Z][\w-_]{5,19}$/);
		return patten.test(text);
	},
	//中文、英文、数字、-、_验证
	zcValid : function(text){
		var patten = RegExp(/^[\u4E00-\u9FA5A-Za-z0-9_-]+$/);
		return patten.test(text);
	},
	//以字母开头正则表达式，英文、数字、-、_验证
	enStartValid : function(text){
		var patten = new RegExp(/^[a-zA-Z][a-zA-Z0-9_]*$/);
		return patten.test(text);
	},
	//中文_验证
	cnValid : function(text){
		var patten = RegExp(/^[\u4E00-\u9FA5]+$/);
		return patten.test(text);
	},
	//mobile
	mobileValid : function(text){ 
		var patten = RegExp(/^1\d{10}$/);
		return patten.test(text);
	},
	//email
	emailValid : function(text){
		var patten = RegExp(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]+$/);
		return patten.test(text);
	},
	//字母&符号&数字至少2种;8-16位数
	pwdValid : function(text){
		var patten = RegExp(/^((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))^.{8,16}$/);
		return patten.test(text);
	},
	//图片验证
	photoValid : function(text){
		var photos = ['.jpg','.png','.jpeg'];
		photoExt=text.substr(text.lastIndexOf(".")).toLowerCase();//获得文件后缀名
		var flag = false;
		for(var i = 0; i < photos.length; i++){
			if(photos[i] == photoExt){
				flag = true;
				break;
			}
		}
		return flag;
	},
	//excel valid
	excelValid : function(text){
		var excels = ['.xlsx'];
		excelExt=text.substr(text.lastIndexOf(".")).toLowerCase();//获得文件后缀名
		var flag = false;
		for(var i = 0; i < excels.length; i++){
			if(excels[i] == excelExt){
				flag = true;
				break;
			}
		}
		return flag;
	},
	//日期格式化
	dateFormat : function(date,fmt){
		if(fmt == undefined){
			fmt = 'yyyy-MM-dd';
		}
		var o = {   
		    "M+" : date.getMonth()+1,                 //月份   
		    "d+" : date.getDate(),                    //日   
		    "h+" : date.getHours(),                   //小时   
		    "m+" : date.getMinutes(),                 //分   
		    "s+" : date.getSeconds(),                 //秒   
		    "q+" : Math.floor((date.getMonth()+3)/3), //季度   
		    "S"  : date.getMilliseconds()             //毫秒   
		};
		if(/(y+)/.test(fmt)){
			fmt = fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));  
		}
		for(var k in o){
			if(new RegExp("("+ k +")").test(fmt)){
				fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
			}
		}
		return fmt;
	},
	
	//json数据的日期格式化
	jsonDateFormat : function(value,format){
		if (value == null || value == '') {
			return '';
		} else {
			return this.dateFormat(new Date(value.time),format);
		}
	},
	
	/**
	 * form表单提交的时候，显示验证信息
	 * 必须有id=_alertInfo的组件
	 */
	alertMsg: function(msg){
		$('#_alertInfo').show();//显示模态框;
		$('#_alertInfo').html(msg);
	},
	
	alertMsgHide: function(){
		$('#_alertInfo').hide();//隐藏模态框;
	},
	
	/**
	 * base64处理图片
	 */
	processImageFile: function(file, callback) {
	    var reader = new FileReader();
	    reader.onload = function(e) {
	        var data = e.target.result;
	            index = data.indexOf(';base64,');
	        if ((index >= 0) && (index < 100)) {
	            callback({
	                image: data,
	                data: data.substring(index + 8)
	            });
	        } else {
	            alert('Browser does not support data URL!');
	        }
	    };
	    reader.readAsDataURL(file);
	}
};

_os = new OS();



